/*******************************************************************************
 * Copyright 2016 oginotihiro
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *******************************************************************************/
package com.raincat.multimediapicker.crop;

import android.graphics.Bitmap;
import android.graphics.Matrix;

public class RotateBitmap {
	private Bitmap bitmap;
	private int rotation;

	public RotateBitmap(Bitmap bitmap, int rotation) {
		this.bitmap = bitmap;
		this.rotation = rotation % 360;
	}

	public void setBitmap(Bitmap bitmap) {
		this.bitmap = bitmap;
	}

	public Bitmap getBitmap() {
		return bitmap;
	}

	public void setRotation(int rotation) {
		this.rotation = rotation;
	}

	public int getRotation() {
		return rotation;
	}

	public Matrix getRotateMatrix() {
		// By default this is an identity matrix
		Matrix matrix = new Matrix();
		if (bitmap != null && rotation != 0) {
			// We want to do the rotation at origin, but since the bounding
			// rectangle will be changed after rotation, so the delta values
			// are based on old & new width/height respectively.
			int cx = bitmap.getWidth() / 2;
			int cy = bitmap.getHeight() / 2;
			matrix.preTranslate(-cx, -cy);
			matrix.postRotate(rotation);
			matrix.postTranslate(getWidth() / 2, getHeight() / 2);
		}
		return matrix;
	}

	public boolean isOrientationChanged() {
		return (rotation / 90) % 2 != 0;
	}

	public int getWidth() {
		if (bitmap == null)
			return 0;
		if (isOrientationChanged()) {
			return bitmap.getHeight();
		} else {
			return bitmap.getWidth();
		}
	}

	public int getHeight() {
		if (bitmap == null)
			return 0;
		if (isOrientationChanged()) {
			return bitmap.getWidth();
		} else {
			return bitmap.getHeight();
		}
	}

	public void recycle() {
		if (bitmap != null) {
			bitmap.recycle();
			bitmap = null;
		}
	}
}